package main

import "fmt"

// 空接口 学习和示例

// 接口中没有定义任何方法时，该接口就是空接口
// 任意类型都实现了空接口 空接口可以存储任意类型的值

type xxx interface {
}

/*
空接口的应用
1. 作为函数的参数
2. 作为map的 value
*/
func main() {
	fmt.Println("ssc")
	var x interface{}
	x = "sunshicheng"
	fmt.Println(x)
	x = 100
	// x = false
	// 空接口作为map的值
	// var m = make(map[string]interface{}, 16)
	// m["name"] = "sunshicheng"
	// m["age"] = 28
	// m["hobby"] = []string{"篮球", "书法"}
	// fmt.Println(m)

	// 空接口的断言和使用
	ret, ok := x.(bool)
	if !ok {
		fmt.Println("不是bool 类型 ", ret)
	} else {
		fmt.Printf("是bool\n")
	}

	// 可以使用switch case 进行判断
	switch v := x.(type) {
	case string:
		fmt.Printf("是字符串类型, %v\n", v)
	case bool:
		fmt.Printf("是bool类型,%v\n", v)
	case int:
		fmt.Printf("是int 类型, %v\n", v)
	default:
		fmt.Printf("判断不出来是什么类型,%v\n", v)

	}

}
